/*
 * 文件名：PaginationDTO.java
 * 版权：MoonBox 
 * 修改人：Peter
 * 修改时间：2018年10月15日
 * 修改内容：新增
 */
package com.renzhebiao.lkang.page;

import java.io.Serializable;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * <p>
 * 
 * @author Peter
 * @param <T>
 * @since 1.0.0
 */
@Data
@ApiModel(value = "pagination", description = "分页条件")
public class PaginationDTO<K, E> implements Serializable {

    /**
     * 查询参数
     */
    @ApiModelProperty(value = "查询参数")
    private K       condition;

    /**
     * 总数
     */
    @ApiModelProperty(value = "总记录数,以客户端为准，如果客户端传>0的值，服务端不再查询总数，直接把该值返回")
    private Integer total;

    /**
     * 每页显示条数，默认 10
     */
    @ApiModelProperty(value = "每页显示条数，默认 10", example = "10")
    private Integer size    = 10;

    /**
     * 当前页
     */
    @ApiModelProperty(value = "每页显示条数，默认 10", required = true, allowableValues = "range[1, 100000]", example = "1")
    @Min(message = "当前页不能低于1", value = 1)
    @Max(message = "当前页不能超过100000", value = 100000)
    private Integer current = 1;

    /**
     * <p>
     * SQL 排序 ORDER BY 字段，例如： id DESC（根据id倒序查询）
     * </p>
     * <p>
     * DESC 表示按倒序排序(即：从大到小排序)<br>
     * ASC 表示按正序排序(即：从小到大排序)
     * </p>
     */
    @ApiModelProperty(value = "排序字段,为空则不要传参,或者orderByField=null,否则服务端会报错", example = "没有请删除")
    private E       orderByField;

    /**
     * 是否为升序 ASC（ 默认： true ）
     */
    @ApiModelProperty(value = "是否为升序 ASC[ 默认： true],降序:false", example = "false")
    private boolean asc;

    public K condition(Class<K> v) throws Exception {
        if (this.getCondition() == null) {
            try {
                this.setCondition(v.newInstance());
            } catch (InstantiationException | IllegalAccessException e) {
                throw new Exception("构建错误");
            }

        }
        return this.getCondition();
    }
}
